<?php
// +----------------------------------------------------------------------
// |     【AiService】服务类
// +----------------------------------------------------------------------

declare (strict_types = 1);

namespace app\common\service;

use think\facade\Request;
use app\common\util\Ai as AI;

class AiService{
	
	/**
	 * 静态方法识别采购信息
	 * @param string $text 用户输入的文本
	 * @return array 返回识别结果
	 */
	public static function readPurchaseInfo(string $text){	
		// 替换换行符为单个空格
		$text = str_replace(["\r\n", "\n", "\r"], ' ', $text);
        
        // 替换"码"为"米"
        $text = str_replace("码", "米", $text);
        
        // 替换"匹"为"条"
        $text = str_replace("匹", "条", $text);
        
        // 替换"卷"为"条"
        $text = str_replace("卷", "条", $text);
        
        // 替换"."为"空格"
        $text = str_replace(".", "  ", $text);
        
		// 构造发送给 AI 模型的提示
		$prompt = "帮我提取文案中的采购信息，然后按我的JSON返回给我；面料编号匹配正则：".'^(?:\d{4}|[A-Z]{2}\d{4}(?:-\d)?|[A-Z]{2}-\d{1})$'."，不带#；采购数量，采购数量是A4或者大货样或者块则数量默认1；采购单位，只有四种情况米、条、KG、块、样，其他情况下自动转化 公斤=KG，大货样=样，A4=块，手感样=块 色号为纯数字格式，类似15#,16号,256绿色，只提取数字即可；数字+米白的内容，代表色号和颜色名，并非数量，例如：3米白；米白是颜色名称；内容出现 公斤数、先报数的字眼，则JSON的采购方式pur_type=0，否则=1；忽略掉内容两位数字+支的，例如32支、40支等\n以下是返回格式：{pur_type:采购方式,list:[{fabric_code:'面料编号',color_code:'色号',color_name:'颜色名称',count:'采购数量',unit:'采购单位'}]}\n以下是文案内容：\n{$text}";
	
		// 调用 AI 模型的静态 send 方法发送请求
		$result = AI::send($prompt,'json');

		return $result;
	}
}